// 封装请求函数
import axios from "axios";
// 路由守卫
import router from "../router";
import { getToken, removeToken } from "./auth.js";
import { Message } from "element-ui";

// 创建axios实例
const service = axios.create({
    // 通用请求的地址前缀
    // baseURL: '/api',
    baseURL: process.env.BASE_API,
    timeout: 5000,
    // 请求带上 cookie
    withCredentials: true,
    // 定义消息头
    headers: {
        "Content-Type": "application/json; charset=utf-8",
    },
});

// 请求拦截器
service.interceptors.request.use(
    (config) => {
        //   // 在请求头中携带token
        //   config.headers.Authorization = localStorage.getItem("token");
        config.headers["Admin-Token"] = getToken();
        return config;
    },
    (error) => {
        console.log(error);
        Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    (response) => {
        const res = response.data;
        // 请求成功，返回数据
        if (res.code === 200) {
            return res;
        } else {
            // 根据状态码提示错误信息
            switch (res.code) {
                case 401:
                    // 无权限，跳转到登录页面并清除token
                    // localStorage.removeItem("token");
                    removeToken();
                    Message({
                        message: res.message,
                        type: "error",
                        duration: 5000,
                    });
                    router.push("/login");
                    break;
                case 403:
                    alert("没有操作权限");
                    break;
                case 404:
                    alert("请求的资源不存在");
                    // todo: 这里可以跳转到404页面
                    break;
                case 500:
                    alert("服务器内部错误");
                    break;
                default:
                    alert(res.message);
            }
            return Promise.reject(res.message || "Error");
        }
    },
    (error) => {
        console.log("err" + error);
        return Promise.reject(error);
    }
);

export default service;
